package tool.codescan.mappers;

import java.util.List;

import tool.data.TypeDefinition;

    /**
     * @author jwb09119
     * @date 2013/12/09
     * 
     * This interfaces is implemented by a class that can resolve inner type names to explicit
     * imports.  This interface exists because the implementing entity in this application is more
     * general purpose than this narrow function and there is no need for access to this narrow
     * function to allow access to wider functionality
     */

public interface InnerClassMapper {

    /**
     * Checks if a specified type has inner class type names registered against it.
     * @param typeName - the path.Type 'address' of a type
     * @return boolean - true if typeName has associated inner classes, otherwise false.
     */
    public boolean checkForInnerClasses (String typeName);
    
    /**
     * Retrieves the inner classes associated with a named type
     * @param typeName - the path.Type 'address' of a type
     * @return - {@link List}<TypeDefinition> - a list of zero or more associated inner types, each 
     *           having the form 'path.typeName.INNERCLASS.InnerTypeName'
     */
    public List<TypeDefinition> getInnerClasses (String typeName);

    
    /**
     * Logs an inner class
     * @param innerClassFullName - an object representing the full name of the inner class:
     *                             (usual form) packagePath.ContainingType.INNERCLASS.InnerTypeName
     * @param currentVisitedType - an object representing the full name of the containing class:
     *                             (usual form) packagePath.ContainingType
     */
    public void logInnerClass (TypeDefinition innerClassFullName, TypeDefinition currentVisitedType);
    
}
